﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Controller; // Brug vores class library "Controller"
using Interfaces; // Brug vores class library "Interfaces"

namespace Sorts_F1
{
    public partial class FrmOpretGrandPrix : Form
    {
        // Attribut
        ClsSystemController systemController;

        public FrmOpretGrandPrix(ClsSystemController systemController) // Modtager controlleren fra start formen
        {
            InitializeComponent();
            this.systemController = systemController; // Istedet for at instansiere en ny controller bruger vi den der bliver sendt med
            this.MinimumSize = this.MaximumSize = this.Size; // Sørg for at formen altid er den nuværende størrelse
        }

        private void FrmOpretGrandPrix_Load(object sender, EventArgs e)
        {
            // Indlæs kørere i comboboxe
            foreach (var item in systemController.VisKoerere())
            {
                cbJoker.Items.Add(item.Navn);
                cbAutoSats1.Items.Add(item.Navn);
                cbAutoSats2.Items.Add(item.Navn);
            }

            cbJoker.SelectedIndex = 0; // vælg det første element i comboboxen


            OpdaterFormen(); // Opret listview og indlæs Grand Prix ved form load
        }

        private void btnOpretGrandPrix_Click(object sender, EventArgs e)
        {
            try
            {

            int koerenummer=0;
            int autoSats1 = 0;
            int autoSats2 = 0;
            DateTime Datotid = new DateTime(dtpDato.Value.Year, dtpDato.Value.Month, dtpDato.Value.Day, int.Parse(txtTimer.Text), int.Parse(txtMin.Text), 0);

            foreach (var item in systemController.VisKoerere())
            {
                // Få kørenumrene der svarer til navnet på køreren i comboboxene
                if ((string)cbJoker.SelectedItem == item.Navn)
                {
                    koerenummer = item.KoereNummer;
                }

                if (cbAutoSats1.Text == item.Navn)
                {
                    autoSats1 = item.KoereNummer;
                }

                if (cbAutoSats2.Text == item.Navn)
                {
                    autoSats2 = item.KoereNummer;
                }
            }

            lvGrandPrix.Items.Clear(); // Clear listview for at gøre klar til indlæsning af opdateret data
            systemController.UploadGrandPrixTilDB(int.Parse(txtGrandPrixNummer.Text), txtLand.Text, txtBane.Text, Datotid, koerenummer, false, autoSats1, autoSats2);
            systemController.OpdaterGrandPrixFraDB(); // Download det nye data
            OpdaterFormen();

            // Gør klar til at kunne indtaste eventuelt nyt Grand Prix
            txtGrandPrixNummer.Clear();
            txtLand.Clear();
            txtBane.Clear();
            
            }

            catch
            {
                // Skulle der forekomme fejl så clear og opdater igen.
                lvGrandPrix.Items.Clear();
                OpdaterFormen();
                MessageBox.Show("Du har ikke navngivet rigtig information", "Fejl");
            }

        }

        public void OpdaterFormen()
        {
            foreach (var item in systemController.VisGrandPrix())
            {
                ListViewItem lvi = new ListViewItem(); // Instansier listview
                lvi.SubItems[0].Text = item.GrandPrixNummer.ToString();
                lvi.SubItems.Add(item.Land);
                lvi.SubItems.Add(item.BaneNavn);
                lvi.SubItems.Add(item.GrandPrixDatoTid.ToString());
                lvi.SubItems.Add(item.Joker.Navn.ToString());
                lvi.Tag = item.GrandPrixNummer;
                lvGrandPrix.Items.Add(lvi); // Addere subitems til listviewet
            }
        }

        private void btnTilbage_Click(object sender, EventArgs e)
        {
            this.Close(); // Lukker formen
        }

        private void cbAutoSats1_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Hvis admin vælger en køre på combobox1 som er den samme køre på combobox2
            if (cbAutoSats1.SelectedIndex == cbAutoSats2.SelectedIndex)
            {
                MessageBox.Show("Du kan ikke vælge den samme autosats kører 2 gange til samme løb");

                // Denne kode sikre at combobox ikke går "Out of bounds", altså forsøger at gå ud til nr 14 når der kun fx er 13 kørere.
                if (cbAutoSats2.Items.Count == cbAutoSats1.SelectedIndex + 1)
                {
                    // Hvis det totale antal elementer i combobox2 svarer til det valgte antal elementer i combobox1 + 1 så tælles der ned for at "undgå out of bounds"
                    cbAutoSats1.SelectedIndex--;
                }

                else
                {
                    cbAutoSats1.SelectedIndex++;
                }

            }
        }

        private void cbAutoSats2_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Hvis admin vælger en køre på combobox2 som er den samme køre på combobox1
            if (cbAutoSats2.SelectedIndex == cbAutoSats1.SelectedIndex)
            {
                MessageBox.Show("Du kan ikke vælge den samme autosats kører 2 gange til samme løb");

                // Denne kode sikre at combobox ikke går "Out of bounds", altså forsøger at gå ud til nr 14 når der kun fx er 13 kørere.
                if (cbAutoSats1.Items.Count == cbAutoSats2.SelectedIndex + 1)
                {
                    // Hvis det totale antal elementer i combobox2 svarer til det valgte antal elementer i combobox1 + 1 så tælles der ned for at "undgå out of bounds" 
                    cbAutoSats2.SelectedIndex--;
                }

                else
                {
                    cbAutoSats2.SelectedIndex++;
                }

            }
        } 
    }
}
